package com.rchat.pocmini.channel;

import com.airtalkee.sdk.AirtalkeeChannel;
import com.airtalkee.sdk.OnChannelAlertListener;
import com.airtalkee.sdk.OnChannelListener;

/**
 * Created by ljd on 2017/2/6.
 * <p>
 * 负责频道数据列表的操作方法。
 * OnChannelListener ，返回与频道数据列表相关的事件，关心此类事件的实例需事先次Interface才会被调用。
 * OnChannelAlertListener ， 关心频道呼入请求的需要实现OnChannelAlertListener接口
 */

public class PocAirtalkeeChannel implements PocAirtalkeeChannelInterface {

    private static AirtalkeeChannel airtalkeeChannel = AirtalkeeChannel.getInstance();
    private static PocAirtalkeeChannel pocAirtalkeeChannel;

    private PocAirtalkeeChannel() {
    }

    /**
     * 获取AirtalkeeCchannel实例
     *
     * @return AirtalkeeChannel
     */
    public static PocAirtalkeeChannel getPocAirtalkeeChannelInstance() {
        if (pocAirtalkeeChannel == null) {
            pocAirtalkeeChannel = new PocAirtalkeeChannel();
        }
        return pocAirtalkeeChannel;
    }

    /**
     * 注册OnChannelListener监听器
     *
     * @param listener 监听器
     */
    @Override
    public void setOnChannelListener(OnChannelListener listener) {
        airtalkeeChannel.setOnChannelListListener(listener);
    }

    /**
     * 从服务器获取当前用户所属的频道列表，事件返回OnChannelListener.onChannelListGet
     *
     * @param type ???这个参数文档没有说明
     */
    @Override
    public void getChannelList(int type) {
        airtalkeeChannel.ChannelListGet(type);
    }

    /**
     * 从服务器获取指定频道的成员列表，
     * 事件返回OnChannelListener.onChannelMemberListGet
     *
     * @param channelId 频道ID
     */
    @Override
    public void getChannelMember(String channelId) {
        airtalkeeChannel.ChannelMemberGet(channelId);
    }

    /**
     * 从服务器获取所有频道的在线人数（仅获取一次）
     * 事件返回OnChannelListener.onChannelOnlineCount
     */
    @Override
    public void getChannelOnlineCount() {
        airtalkeeChannel.ChannelOnlineCountGet();
    }

    /**
     * 从服务器周期性获取所有频道的在线人数（切记不需要展示频道在线时调用
     * getChannelOnlineCountStop将其结束，否则一直会消耗用户流量）,
     * 事件返回OnChannelListener.onChannelOnlineCount
     *
     * @param timeSeconds 周期间隔秒数
     */
    @Override
    public void getChannelOnlineCountStart(int timeSeconds) {
        airtalkeeChannel.ChannelOnlineCountGetStart(timeSeconds);
    }

    /**
     * 结束周期性获取所有频道的在线人数
     */
    @Override
    public void getChannelOnlineCountStop() {
        airtalkeeChannel.ChannelOnlineCountGetStop();
    }

    /**
     * 注册呼入通知监听器，关心此事件的需设置此listener的实例
     *
     * @param listener 监听器
     */
    @Override
    public void setOnChannelAlertListener(OnChannelAlertListener listener) {
        airtalkeeChannel.setOnChannelAlertListener(listener);
    }

    /**
     * 发起频道呼入
     *
     * @param channelId 频道ID
     */
    @Override
    public void channelAlert(String channelId) {
        airtalkeeChannel.ChannelAlert(channelId);
    }

    /**
     * 发起频道呼入，
     * 事件返回OnChannelAlertListener.onChannelAlertSent
     *
     * @param channelId 频道ID
     * @param isForceId 是否强制呼入成员，当强制时，接受到呼入通知的成员将直接进入此频道会话
     */
    @Override
    public void channelAlert(String channelId, boolean isForceId) {
        airtalkeeChannel.ChannelAlert(channelId, isForceId);
    }

    /**
     * 频道呼入应答，当用户收到频道呼入通知后，可通过此接口进行应答
     *
     * @param isAccept 是否应答此呼入请求，isAccept为true，即应答后SDK
     *                 会自动接通此频道会话，为false，则自动忽略此请求
     */
    @Override
    public void channelAlertIncomingClose(boolean isAccept) {
        airtalkeeChannel.ChannelAlertIncomingClose(isAccept);
    }


}
